package com.qf.controller;

import com.netflix.hystrix.contrib.javanica.annotation.DefaultProperties;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;
import com.qf.feign.OrderFeignApi;
import com.qf.pojo.R;
import com.qf.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

//@RestController
//@RequestMapping("/user")
//@DefaultProperties(defaultFallback="default_fb")
public class UserController3 {

    /*
        默认降级方法返回值要和被保护的资源方法保持一致，参数列表留空的
        在参数列表的最后，可选添加一个异常对象，收集异常信息
     */
    public R default_fb(Throwable e){
        e.printStackTrace();
        return R.error().putMsg("default 降级....");
    }

    @Autowired
    UserService userService;

    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private OrderFeignApi orderFeignApi;


    @GetMapping("/{id}")

    @HystrixCommand
    public R findOrders(@PathVariable("id") Integer id) throws InterruptedException {

        //发起远程访问，访问order服务
//        R r = restTemplate.getForObject("http://QF-ORDER/order/" + id, R.class);
        R r = orderFeignApi.findByUid(id);

        return r;
    }

    /*
        针对findOrders方法的降级方法
            这个方法的返回值和参数列表需要和目标受保护方法保持一致
            在参数列表的最后，可选添加一个异常对象，用来接收异常信息
     */
    public R findOrders_fb(Integer id,Throwable e){
        e.printStackTrace();
        return R.error().putMsg("服务器忙，稍后重试...");
    }
}
